package com.ruoyi.system.service.impl;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.DeviceInfo;
import com.ruoyi.system.mapper.DeviceInfoMapper;
import com.ruoyi.system.service.IDeviceInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * 设备基础信息管理Service业务层处理
 *
 * @author ruoyi
 * @date 2025-03-19
 */
@Service
public class DeviceInfoServiceImpl implements IDeviceInfoService {
    @Autowired
    private DeviceInfoMapper deviceInfoMapper;

    /**
     * 查询设备基础信息管理
     *
     * @param deviceId 设备基础信息管理主键
     * @return 设备基础信息管理
     */
    @Override
    public DeviceInfo selectDeviceInfoByDeviceId(String deviceId) {
        return deviceInfoMapper.selectDeviceInfoByDeviceId(deviceId);
    }

    /**
     * 查询设备基础信息管理列表
     *
     * @param deviceInfo 设备基础信息管理
     * @return 设备基础信息管理
     */
    @Override
    public List<DeviceInfo> selectDeviceInfoList(DeviceInfo deviceInfo) {
        return deviceInfoMapper.selectDeviceInfoList(deviceInfo);
    }

    private static int sequence = 0; // 序列号
    private static final int MAX_SEQUENCE = 999; // 序列号最大值
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyMM"); // 年月格式

    public synchronized static String generateSerialNumber() {
        // 获取当前日期的年月
        String datePart = dateFormat.format(new Date());


        Random random = new Random();
        // 生成100到999之间的随机数
        Integer sequence = random.nextInt(900) + 100;


        // 计算序列号部分，确保是三位数
        String serialPart = String.format("%03d", sequence);

        // 组装最终的编号
        String serialNumber = "SHB" + datePart + serialPart;

        // 更新序列号
        sequence++;


        return serialNumber;
    }

    /**
     * 新增设备基础信息管理
     *
     * @param deviceInfo 设备基础信息管理
     * @return 结果
     */
    @Override
    public int insertDeviceInfo(DeviceInfo deviceInfo) {
        deviceInfo.setCreateTime(DateUtils.getNowDate());
        deviceInfo.setDeviceId(generateSerialNumber());
        deviceInfo.setResponsiblePerson(SecurityUtils.getLoginUser().getUser().getNickName());
        return deviceInfoMapper.insertDeviceInfo(deviceInfo);
    }

    /**
     * 修改设备基础信息管理
     *
     * @param deviceInfo 设备基础信息管理
     * @return 结果
     */
    @Override
    public int updateDeviceInfo(DeviceInfo deviceInfo) {
        deviceInfo.setUpdateTime(DateUtils.getNowDate());
        return deviceInfoMapper.updateDeviceInfo(deviceInfo);
    }

    /**
     * 批量删除设备基础信息管理
     *
     * @param deviceIds 需要删除的设备基础信息管理主键
     * @return 结果
     */
    @Override
    public int deleteDeviceInfoByDeviceIds(String[] deviceIds) {
        return deviceInfoMapper.deleteDeviceInfoByDeviceIds(deviceIds);
    }

    /**
     * 删除设备基础信息管理信息
     *
     * @param deviceId 设备基础信息管理主键
     * @return 结果
     */
    @Override
    public int deleteDeviceInfoByDeviceId(String deviceId) {
        return deviceInfoMapper.deleteDeviceInfoByDeviceId(deviceId);
    }
}
